package server.netty.websocket;



import server.util.CodeUtils;

import java.util.Arrays;

/**
 * <pre>
 * 自己定义的协议
 *  数据包格式
 * +——----——+——-----——+——----——+
 * |协议开始标志|  长度             |   数据       |
 * +——----——+——-----——+——----——+
 * 1.协议开始标志head_data，为int类型的数据，16进制表示为0X76
 * 2.传输数据的长度contentLength，int类型
 * 3.要传输的数据
 * </pre>
 */
public class GameProtocol {

	private int  protocolCode = -1;

	/**
	 * 消息的开头的信息标志
	 */
	//	private int head_data = ConstantValue.HEAD_DATA;
	/**
	 * 消息的内容
	 */
	private byte[] content;

	/**
	 * 用于初始化，SmartCarProtocol
	 * 
	 * @param contentLength
	 *            协议里面，消息数据的长度
	 * @param content
	 *            协议里面，消息的数据
	 */
	public GameProtocol(int protocolCode, byte[] content) {
		this.protocolCode = protocolCode;
		this.content = content;
	}

	//	public int getHead_data() {
	//		return head_data;
	//	}

	public int getContentLength() {
		if(this.content == null) {
			return 0;
		}else {
			return this.content.length;
		}
	}

	/**
	 * 返回加密内容
	 * @return
	 */
//	public byte[] getEncodeContent() {
//		int length = 8 + getContentLength();
//		byte[] newcontent = new byte[length];
//		byte[]  arr_1 = CodeUtils.toLH(protocolCode);
//		byte[]  arr_2 = CodeUtils.toLH(content.length);
//		for(int i = 0;i < length;i++) {
//			if(i < 4) {
//				newcontent[i] = arr_1[i];
//			}else if(i < 8) {
//				newcontent[i] = arr_2[i - 4];
//			}else {
//				newcontent[i] = content[i - 8];
//			}
//		}
//
//		return CodeUtils.encode(newcontent, GameConstantValue.NET_PASSWORD);
//	}
	
	public byte[] getEncodeContent() {
		int length = 8 + getContentLength();
		byte[] newcontent = new byte[length];
		byte[]  arr_1 = CodeUtils.intToByteArray(protocolCode);//协议号
		byte[]  arr_2 = CodeUtils.intToByteArray(content.length);//协议长度
		for(int i = 0;i < length;i++) {
			if(i < 4) {
				newcontent[i] = arr_1[i];
			}else if(i < 8) {
				newcontent[i] = arr_2[i - 4];
			}else {
				newcontent[i] = content[i - 8];
			}
		}

		return newcontent;
	}

	public byte[] getContent() {
		return content;
	}

	public void setContent(byte[] content) {
		this.content = content;
	}

	public int getProtocolCode() {
		return protocolCode;
	}

	@Override
	public String toString() {
		return "GameProtocol [protocolId = " + protocolCode + " contentLength="
				+ getContentLength() + ", content=" + Arrays.toString(content) + "]";
	}



}